\section{联邦选举系统}\label{sec:voting}

本节开发了一套可供FBAS中的节点对某个陈述认可的联邦选举技术。从高层次来看，对某个陈述$a$认可的过程涉及节点交换两个集合的消息。首先，节点为$a$投票。其次，如果投票成功，节点\textit{确认}$a$，在第一次投票成功的基础上有效地举行第二次投票。

在每个节点看来，两个回合的消息把对陈述$a$的认可分成了三个阶段：不知道的，认可的和确认的。最初，$a$的状态对一个节点来说是一无所知的——$a$可能最终为真，为假，甚或\textit{卡在}了一个长期不确定的状态上。如果第一次投票成功，$v$可能会\textit{接受}$a$。两个完好节点永远不会接受相互矛盾的陈述，因此如果$v$是完好的并且接受了$a$那么$a$就不可能是假的。

然而由于两种原因，$v$接受$a$并不能说明$a$为真。首先，$v$接受$a$这一事实并未表明所有完好节点都能接受$a$。其次，如果$v$是被污染的，那么接受$a$不能说明任何问题——$a$可能在完整节点处被认为是假的。然而即使$v$被污染了——$v$并不知道这一点——系统仍然可以有良性行为节点的{\quorum}可交性，在这种情形下为了确保最优安全性$v$需要对$a$断言有更高的保障\todo{(语句不通)}。举行第二次选举用来解决这两个问题。如果第二次选举成功，$v$转为\textit{已确认}状态，这时它可以最终认为$a$为真并作用于$a$上。

下面的子章节阐述了联邦选举过程的细节。因为投票并没有去除陈述被阻塞的可能性，第\ref{sec:vote_stuck}节讨论如何处理它们。在第\ref{sec:scp}节里我们将联邦选举传统转化成一个共识协议，它可以避免完整节点的被阻塞{\slot}的可能性。

\input{tex/5-voting-s1}
\input{tex/5-voting-s2}
\input{tex/5-voting-s3}
\input{tex/5-voting-s4}
\input{tex/5-voting-s5}
\input{tex/5-voting-s6}